<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>35.3. Zend_Rest_Server</title>
<link rel="stylesheet" href="dbstyle.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
<link rel="start" href="index.html" title="Programmer's Reference Guide">
<link rel="up" href="zend.rest.html" title="Chapter 35. Zend_Rest">
<link rel="prev" href="zend.rest.client.html" title="35.2. Zend_Rest_Client">
<link rel="next" href="zend.search.lucene.html" title="Chapter 36. Zend_Search_Lucene">
<link rel="chapter" href="introduction.html" title="Chapter 1. Introduction to Zend Framework">
<link rel="chapter" href="zend.acl.html" title="Chapter 2. Zend_Acl">
<link rel="chapter" href="zend.auth.html" title="Chapter 3. Zend_Auth">
<link rel="chapter" href="zend.cache.html" title="Chapter 4. Zend_Cache">
<link rel="chapter" href="zend.config.html" title="Chapter 5. Zend_Config">
<link rel="chapter" href="zend.console.getopt.html" title="Chapter 6. Zend_Console_Getopt">
<link rel="chapter" href="zend.controller.html" title="Chapter 7. Zend_Controller">
<link rel="chapter" href="zend.currency.html" title="Chapter 8. Zend_Currency">
<link rel="chapter" href="zend.date.html" title="Chapter 9. Zend_Date">
<link rel="chapter" href="zend.db.html" title="Chapter 10. Zend_Db">
<link rel="chapter" href="zend.debug.html" title="Chapter 11. Zend_Debug">
<link rel="chapter" href="zend.dojo.html" title="Chapter 12. Zend_Dojo">
<link rel="chapter" href="zend.dom.html" title="Chapter 13. Zend_Dom">
<link rel="chapter" href="zend.exception.html" title="Chapter 14. Zend_Exception">
<link rel="chapter" href="zend.feed.html" title="Chapter 15. Zend_Feed">
<link rel="chapter" href="zend.filter.html" title="Chapter 16. Zend_Filter">
<link rel="chapter" href="zend.form.html" title="Chapter 17. Zend_Form">
<link rel="chapter" href="zend.gdata.html" title="Chapter 18. Zend_Gdata">
<link rel="chapter" href="zend.http.html" title="Chapter 19. Zend_Http">
<link rel="chapter" href="zend.infocard.html" title="Chapter 20. Zend_InfoCard">
<link rel="chapter" href="zend.json.html" title="Chapter 21. Zend_Json">
<link rel="chapter" href="zend.layout.html" title="Chapter 22. Zend_Layout">
<link rel="chapter" href="zend.ldap.html" title="Chapter 23. Zend_Ldap">
<link rel="chapter" href="zend.loader.html" title="Chapter 24. Zend_Loader">
<link rel="chapter" href="zend.locale.html" title="Chapter 25. Zend_Locale">
<link rel="chapter" href="zend.log.html" title="Chapter 26. Zend_Log">
<link rel="chapter" href="zend.mail.html" title="Chapter 27. Zend_Mail">
<link rel="chapter" href="zend.measure.html" title="Chapter 28. Zend_Measure">
<link rel="chapter" href="zend.memory.html" title="Chapter 29. Zend_Memory">
<link rel="chapter" href="zend.mime.html" title="Chapter 30. Zend_Mime">
<link rel="chapter" href="zend.openid.html" title="Chapter 31. Zend_OpenId">
<link rel="chapter" href="zend.paginator.html" title="Chapter 32. Zend_Paginator">
<link rel="chapter" href="zend.pdf.html" title="Chapter 33. Zend_Pdf">
<link rel="chapter" href="zend.registry.html" title="Chapter 34. Zend_Registry">
<link rel="chapter" href="zend.rest.html" title="Chapter 35. Zend_Rest">
<link rel="chapter" href="zend.search.lucene.html" title="Chapter 36. Zend_Search_Lucene">
<link rel="chapter" href="zend.server.html" title="Chapter 37. Zend_Server">
<link rel="chapter" href="zend.service.html" title="Chapter 38. Zend_Service">
<link rel="chapter" href="zend.session.html" title="Chapter 39. Zend_Session">
<link rel="chapter" href="zend.soap.html" title="Chapter 40. Zend_Soap">
<link rel="chapter" href="zend.test.html" title="Chapter 41. Zend_Test">
<link rel="chapter" href="zend.text.html" title="Chapter 42. Zend_Text">
<link rel="chapter" href="zend.timesync.html" title="Chapter 43. Zend_TimeSync">
<link rel="chapter" href="zend.translate.html" title="Chapter 44. Zend_Translate">
<link rel="chapter" href="zend.uri.html" title="Chapter 45. Zend_Uri">
<link rel="chapter" href="zend.validate.html" title="Chapter 46. Zend_Validate">
<link rel="chapter" href="zend.version.html" title="Chapter 47. Zend_Version">
<link rel="chapter" href="zend.view.html" title="Chapter 48. Zend_View">
<link rel="chapter" href="zend.xmlrpc.html" title="Chapter 49. Zend_XmlRpc">
<link rel="appendix" href="requirements.html" title="Appendix A. Zend Framework Requirements">
<link rel="appendix" href="coding-standard.html" title="Appendix B. Zend Framework Coding Standard for PHP">
<link rel="appendix" href="copyrights.html" title="Appendix C. Copyright Information">
<link rel="index" href="the.index.html" title="Index">
<link rel="subsection" href="zend.rest.server.html#zend.rest.server.introduction" title="35.3.1. Introduction">
<link rel="subsection" href="zend.rest.server.html#zend.rest.server.usage" title="35.3.2. REST Server Usage">
<link rel="subsection" href="zend.rest.server.html#zend.rest.server.args" title="35.3.3. Calling a Zend_Rest_Server Service">
<link rel="subsection" href="zend.rest.server.html#zend.rest.server.customstatus" title="35.3.4. Sending A Custom Status">
<link rel="subsection" href="zend.rest.server.html#zend.rest.server.customxml" title="35.3.5. Returning Custom XML Responses">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader"><table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">35.3. Zend_Rest_Server</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="zend.rest.client.html">Prev</a> </td>
<th width="60%" align="center">Chapter 35. Zend_Rest</th>
<td width="20%" align="right"> <a accesskey="n" href="zend.search.lucene.html">Next</a>
</td>
</tr>
</table></div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="zend.rest.server"></a>35.3. Zend_Rest_Server</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.rest.server.introduction"></a>35.3.1. Introduction</h3></div></div></div>
<p>
            Zend_Rest_Server is intended as a fully-featured REST server.
        </p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.rest.server.usage"></a>35.3.2. REST Server Usage</h3></div></div></div>
<div class="example">
<a name="zend.rest.server.usage.example-1"></a><p class="title"><b>Example 35.6. Basic Zend_Rest_Server Usage - Classes</b></p>
<div class="example-contents"><pre class="programlisting">&lt;?php
require_once 'Zend/Rest/Server.php';
require_once 'My/Service/Class.php';

$server = new Zend_Rest_Server();
$server-&gt;setClass('My_Service_Class');
$server-&gt;handle();
            </pre></div>
</div>
<br class="example-break"><div class="example">
<a name="zend.rest.server.usage.example-2"></a><p class="title"><b>Example 35.7. Basic Zend_Rest_Server Usage - Functions</b></p>
<div class="example-contents"><pre class="programlisting">&lt;?php
require_once 'Zend/Rest/Server.php';

/**
 * Say Hello
 *
 * @param string $who
 * @param string $when
 * @return string
 */
function sayHello($who, $when)
{
    return "Hello $who, Good $when";
}

$server = new Zend_Rest_Server();
$server-&gt;addFunction('sayHello');
$server-&gt;handle();
            </pre></div>
</div>
<br class="example-break">
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.rest.server.args"></a>35.3.3. Calling a Zend_Rest_Server Service</h3></div></div></div>
<p>
            To call a <code class="code">Zend_Rest_Server</code> service, you must supply a
            GET/POST <code class="code">method</code> argument with a value that is the
            method you wish to call. You can then follow that up with any number
            of arguments using either the name of the argument (i.e. "who") or
            using <code class="code">arg</code> following by the numeric position of the
            argument (i.e. "arg1").
        </p>
<div class="note"><table border="0" summary="Note: Numeric index">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td>
<th align="left">Numeric index</th>
</tr>
<tr><td align="left" valign="top"><p>
                Numeric arguments use a 1-based index.
            </p></td></tr>
</table></div>
<p>
            To call <code class="code">sayHello</code> from the example above, you can use either:
        </p>
<p>
            <code class="code">?method=sayHello&amp;who=Davey&amp;when=Day</code>
        </p>
<p>
            or:
        </p>
<p>
            <code class="code">?method=sayHello&amp;arg1=Davey&amp;arg2=Day</code>
        </p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.rest.server.customstatus"></a>35.3.4. Sending A Custom Status</h3></div></div></div>
<p>
            When returning values, to return a custom status, you may return an
            array with a <code class="code">status</code> key.
        </p>
<div class="example">
<a name="zend.rest.server.customstatus.example-1"></a><p class="title"><b>Example 35.8. Returning Custom Status</b></p>
<div class="example-contents"><pre class="programlisting">&lt;?php
require_once 'Zend/Rest/Server.php';

/**
 * Say Hello
 *
 * @param string $who
 * @param string $when
 * @return array
 */
function sayHello($who, $when)
{
    return array('msg' =&gt; "An Error Occurred", 'status' =&gt; false);
}

$server = new Zend_Rest_Server();
$server-&gt;addFunction('sayHello');
$server-&gt;handle();
            </pre></div>
</div>
<br class="example-break">
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.rest.server.customxml"></a>35.3.5. Returning Custom XML Responses</h3></div></div></div>
<p>
            If you wish to return custom XML, simply return a
            <code class="code">DOMDocument</code>, <code class="code">DOMElement</code> or
            <code class="code">SimpleXMLElement</code> object.
        </p>
<div class="example">
<a name="zend.rest.server.customxml.example-1"></a><p class="title"><b>Example 35.9. Return Custom XML</b></p>
<div class="example-contents"><pre class="programlisting">&lt;?php
require_once 'Zend/Rest/Server.php';

/**
 * Say Hello
 *
 * @param string $who
 * @param string $when
 * @return SimpleXMLElement
 */
function sayHello($who, $when)
{
    $xml ='&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;mysite&gt;
    &lt;value&gt;Hey $who! Hope you're having a good $when&lt;/value&gt;
    &lt;code&gt;200&lt;/code&gt;
&lt;/mysite&gt;';

    $xml = simplexml_load_string($xml);
    return $xml;
}

$server = new Zend_Rest_Server();
$server-&gt;addFunction('sayHello');

$server-&gt;handle();
            </pre></div>
</div>
<br class="example-break"><p>
            The response from the service will be returned without modification
            to the client.
        </p>
</div>
</div>
<div class="navfooter"><table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="zend.rest.client.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="zend.rest.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="zend.search.lucene.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">35.2. Zend_Rest_Client </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> Chapter 36. Zend_Search_Lucene</td>
</tr>
</table></div>
<div class="revinfo"></div>
</body>
</html>
